<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>File Uploading Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 2.1.0</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
File Uploading Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">


<h1>파일 업로드 File Uploading Class</h1>

<p>CodeIgniter의 파일 업로딩 클래스는 파일을 업로드 할 수 있도록 해줍니다.다양한 설정옵션이 있으며 , 파일타입이나 크기등을 제한할 수 있습니다.</p>


<h2>절차 The Process</h2>

<p>파일을 업로드하는 과정은 다음의 일반적차를 따릅니다:</p>


<ul>
<li>업로드 폼이 표시되고 사용자는 업로드할 파일을 선택합니다.</li>
<li>폼이 전송(submit)되면 ,파일은 여러분이 정의한 위치에 업로드 됩니다.</li>
<li>이때, 여러분이 선택한 옵션에 따라 파일이 업로드 허용된 된것인지 여부를 검사(validate)합니다.</li>
<li>일단 업로드 되면 사용자에게 성공적으로 업로드 되었다는 메세지를 보여줍니다.</li>
</ul>

<p>이 과정을 보여주기 위하여 간단한 튜토리얼을 보여드립니다. 그리고 그 아래 참조가이드를 제공합니다. </p>

<h2>업로드 폼 생성 Creating the Upload Form</h2>



<p>텍스트에디터를 사용하여 <dfn>upload_form.php</dfn>이라는 폼을 파일을 생성합니다. 그리고 아래 코드를 삽입한후 <samp>applications/views/</samp>
폴더 아래 저장합니다:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="23">
&lt;html>
&lt;head>
&lt;title>Upload Form&lt;/title>
&lt;/head>
&lt;body>

&lt;?php echo $error;?>

&lt;?php echo form_open_multipart('upload/do_upload');?>

&lt;input type="file" name="userfile" size="20" />

&lt;br />&lt;br />

&lt;input type="submit" value="upload" />

&lt;/form>

&lt;/body>
&lt;/html></textarea>

<p>위코드를 보시면 form 헬퍼를 사용하여 여는 form 태그대신 사용한것을 알수 있습니다.  파일업로드는 multipart form을 필요로 하므로 헬퍼는 적당한 태그를 자동으로 작성해줍니다.  그리고 $error 변수가 있다는것을 알수 있으실 것입니다. 이 변수는 사용자의 실수에 대해서 에러메세지를 보여줍니다.</p>


<h2>성공 페이지 The Success Page</h2>

<p>텍스트 에디터를 이용하여  <dfn>upload_success.php</dfn>파일을 작성합니다.
그리고 그 안에 아래 코드를 삽입한후 <samp>applications/views/</samp> 폴더 아래 저장합니다:</p>

<textarea class="textarea" style="width:100%" cols="50" rows="20">&lt;html>
&lt;head>
&lt;title>Upload Form&lt;/title>
&lt;/head>
&lt;body>

&lt;h3>Your file was successfully uploaded!&lt;/h3>

&lt;ul>
&lt;?php foreach($upload_data as $item => $value):?>
&lt;li>&lt;?php echo $item;?>: &lt;?php echo $value;?>&lt;/li>
&lt;?php endforeach; ?>
&lt;/ul>

&lt;p>&lt;?php echo anchor('upload', 'Upload Another File!'); ?>&lt;/p>

&lt;/body>
&lt;/html></textarea>


<h2>컨트롤러 The Controller</h2>

<p>텍스트 에디터를 이용하여 <dfn>upload.php</dfn>라는 이름의 컨트롤러 파일을 작성한후  아래의 코드를 삽입하고 <samp>applications/controllers/</samp>
폴더 아래 저장합니다.:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="43">&lt;?php

class Upload extends CI_Controller {
	
	function __construct()
	{
		parent::__construct();
		$this->load->helper(array('form', 'url'));
	}
	
	function index()
	{	
		$this->load->view('upload_form', array('error' => ' ' ));
	}

	function do_upload()
	{
		$config['upload_path'] = './uploads/';
		$config['allowed_types'] = 'gif|jpg|png';
		$config['max_size']	= '100';
		$config['max_width']  = '1024';
		$config['max_height']  = '768';
		
		$this->load->library('upload', $config);
	
		if ( ! $this->upload->do_upload())
		{
			$error = array('error' => $this->upload->display_errors());
			
			$this->load->view('upload_form', $error);
		}	
		else
		{
			$data = array('upload_data' => $this->upload->data());
			
			$this->load->view('upload_success', $data);
		}
	}	
}
?&gt;</textarea>


<h2>업로드 폴더 The Upload Folder</h2>

<p>업로드 한 이미지를 저장할 대상폴더가 필요합니다.CodeIgniter 가 설치된 루트폴더에 <dfn>uploads</dfn> 라는폴더를 생성하고 권한을 777로 합니다.</p>


<h2>시험해보세요! Try it!</h2>

<p>작성한 폼을 테스트하기위해 아래와 유사한 경로로 접근합니다:</p>

<code>example.com/index.php/<var>upload</var>/</code>

<p>업로드 폼을 보실수 있으실겁니다. 이미지 파일( jpg, gif, png 등)업로드를 시도해보세요 .컨트롤러의 경로가 올바르다면 제대로 작동하는것을 확인하실 수 있습니다.</p>


<p>&nbsp;</p>

<h1>참조 가이드 Reference Guide</h1>


<h2>업로드 클래스 초기화 Initializing the Upload Class</h2>

<p>CodeIgniter의 다른 클래스들과 마찬가지로 ,컨트롤러에서 <dfn>$this->load->library</dfn> 함수를 이용하여 초기화 합니다:</p>

<code>$this->load->library('upload');</code>
<p>업로드 클래스가 로드되면 , <dfn>$this->upload</dfn> 과 같이 업로드 객체를 사용하실 수 있습니다. </p>


<h2>설정하기 Setting Preferences</h2>

<p>다른 라이브러리들과 마찬가지로 , 어떤 파일이 업로드 허용될지 설정할 수 있습니다.위에서 만든 컨트롤러에서 아래의 설정을 추가해보세요 :</p>

<code>$config['upload_path'] = './uploads/';<br />
$config['allowed_types'] = 'gif|jpg|png';<br />
$config['max_size']	= '100';<br />
$config['max_width']  = '1024';<br />
$config['max_height']  = '768';<br />
<br />
$this->load->library('upload', $config);<br /><br />

// Alternately you can set preferences by calling the initialize function.  Useful if you auto-load the class:<br />
$this->upload->initialize($config);</code>

<p>위 설정은 대부분 무엇을 뜻하는지 직관적으로 알수 있으실겁니다.  아래 테이블은 가능한 설정들을 보여줍니다.</p>


<h2>설정들 Preferences</h2>

<p>아래의 설정들이 사용가능합니다.설정을 명시하지않을경우 사용될 기본값들도 확인하세요 .</p>

<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
<tr>
<th>설정</th>
<th>기본값</th>
<th>옵션</th>
<th>설명</th>
</tr>

<tr>
<td class="td"><strong>upload_path</strong></td>
<td class="td">None</td>
<td class="td">None</td>
<td class="td">업로드 파일이 위치할 폴더경로 .폴더는 쓰기 가능해야하며 경로는 절대경로 혹은 상대경로를 사용합니다.</td>
</tr>

<tr>
<td class="td"><strong>allowed_types</strong></td>
<td class="td">None</td>
<td class="td">None</td>
<td class="td">업로드를 허용할 파일의 마임타입(mime types)을 설정합니다.  보통 파일 확장자는 마임타입으로 사용될수 있습니다.  멀티플타입은 파이프를 이용하여 구분합니다.</td>
</tr>


<tr>
<td class="td"><strong>overwrite</strong></td>
<td class="td">FALSE</td>
<td class="td">TRUE/FALSE (boolean)</td>
<td class="td">true 로 설정된 상태에서, 같은 이름의 파일이 이미 존재한다면 덮어쓸것입니다. false 로 설정되어있으면, 파일명에 숫자가 추가로 붙게됩니다.</td>
</tr>


<tr>
<td class="td"><strong>max_size</strong></td>
<td class="td">0</td>
<td class="td">None</td>
<td class="td">업로드 파일의 최대크기(KB)를 지정합니다.  0으로 설정하면 크기 제한이 없게됩니다.대부분의  PHP는 php.ini 파일에 업로드 파일 크기 설정이 이미 되어있습니다.일반적으로 2 MB ( 2048 KB)가 기본입니다.</td>
</tr>

<tr>
<td class="td"><strong>max_width</strong></td>
<td class="td">0</td>
<td class="td">None</td>
<td class="td">업로드 파일의 최대 너비(픽셀단위) 를 설정합니다. 0 이면 제한이 없습니다.</td>
</tr>

<tr>
<td class="td"><strong>max_height</strong></td>
<td class="td">0</td>
<td class="td">None</td>
<td class="td">업로드 파일의 최대 높이(픽셀단위)를 설정합니다. 0이면 제한이 없습니다.</td>
</tr>

<tr>
<td class="td"><strong>max_filename</strong></td>
<td class="td">0</td>
<td class="td">None</td>
<td class="td">파일이름의 최대길이를 지정합니다.0이면 제한이 없습니다..</td>
</tr>

<tr>
<td class="td"><strong>encrypt_name</strong></td>
<td class="td">FALSE</td>
<td class="td">TRUE/FALSE (boolean)</td>
<td class="td">TRUE로 설정하면 파일이름은 랜덤하게 암호화된 문자열로 변합니다. 파일을 업로드한 사람이 파일명을 알수 없도록할때 유용합니다.</td>
</tr>

<tr>
<td class="td"><strong>remove_spaces</strong></td>
<td class="td">TRUE</td>
<td class="td">TRUE/FALSE (boolean)</td>
<td class="td">TRUE로 설정하면 파일명에 공백이 있을경우 밑줄(_)로 변경됩니다.이 옵션은 사용을 권장합니다.</td>
</tr>
</table>


<h2>설정파일에서 설정하기 Setting preferences in a config file</h2>

<p>위 설정들을 컨트롤러대신 설정파일에서 할수도 있습니다. 먼저 <var>upload.php</var>파일을 생성한후  <var>$config</var>
배열을 그 안에 만듧니다. 그런다음 그 파일을 <var>config/upload.php</var> 로 저장하면 자동으로 설정이 적용될것입니다. 그려면 <dfn>$this->upload->initialize</dfn> 함수를 사용할 필요가 없습니다.</p>


<h2>함수들 Function Reference</h2>

<p>아래 함수들이 사용가능합니다.</p>


<h2>$this->upload->do_upload()</h2>

<p>여러분의 설정에 따라 업로드를 수행합니다.참고:  기본설정은 파일이  <dfn>userfile</dfn>라는 폼필드로부터 업로드 될것이라고 기대합니다.또한 폼은 multipart 타입이라야 합니다.:</p>

<code>&lt;form method="post" action="some_action" enctype="multipart/form-data" /></code>

<p>필드명을 여러분이 저장하고싶다면 <dfn>do_upload</dfn> 함수에 아래와같이 그 이름을 파라미터로 넘겨주시면 됩니다.:</p>

<code>
$field_name = "some_field_name";<br />
$this->upload->do_upload($field_name)</code>


<h2>$this->upload->display_errors()</h2>

<p><dfn>do_upload()</dfn> 함수가 실패했을때 에러메시지를 추출해줍니다.  이 함수는 자동으로 echo 까지 수행해주지는 않습니다. 단지 데이터만 전달해줄뿐이므로 그 후처리는 여러분이 원하는대로 할 수 있습니다..</p>

<h3>에러메세지 포멧설정 Formatting Errors</h3>
<p>기본으로 위함수는 에러를  &lt;p> 태그들로 감쌉니다.  여러분은 아래와같은 방법으로 다른 구분자를 설정할 수 있습니다.:</p>

<code>$this->upload->display_errors('<var>&lt;p></var>', '<var>&lt;/p></var>');</code>

<h2>$this->upload->data()</h2>

<p>업로드한 파일에 관련된 모든 데이터를 배열의 형태로 리턴해주는 헬퍼 함수 입니다.다음 프로토타입을 참조하세요 :</p>

<code>Array<br />
(<br />
&nbsp;&nbsp;&nbsp;&nbsp;[file_name]&nbsp;&nbsp;&nbsp;&nbsp;=> mypic.jpg<br />
&nbsp;&nbsp;&nbsp;&nbsp;[file_type]&nbsp;&nbsp;&nbsp;&nbsp;=> image/jpeg<br />
&nbsp;&nbsp;&nbsp;&nbsp;[file_path]&nbsp;&nbsp;&nbsp;&nbsp;=> /path/to/your/upload/<br />
&nbsp;&nbsp;&nbsp;&nbsp;[full_path]&nbsp;&nbsp;&nbsp;&nbsp;=> /path/to/your/upload/jpg.jpg<br />
&nbsp;&nbsp;&nbsp;&nbsp;[raw_name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> mypic<br />
&nbsp;&nbsp;&nbsp;&nbsp;[orig_name]&nbsp;&nbsp;&nbsp;&nbsp;=> mypic.jpg<br />
&nbsp;&nbsp;&nbsp;&nbsp;[file_ext]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> .jpg<br />
&nbsp;&nbsp;&nbsp;&nbsp;[file_size]&nbsp;&nbsp;&nbsp;&nbsp;=> 22.2<br />
&nbsp;&nbsp;&nbsp;&nbsp;[is_image]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;[image_width]&nbsp;&nbsp;=> 800<br />
&nbsp;&nbsp;&nbsp;&nbsp;[image_height] => 600<br />
&nbsp;&nbsp;&nbsp;&nbsp;[image_type]&nbsp;&nbsp;&nbsp;=> jpeg<br />
&nbsp;&nbsp;&nbsp;&nbsp;[image_size_str] => width="800" height="200"<br />
)</code>

<h3>설명 Explanation</h3>

<p>위 배열 아이템에대한 설명입니다..</p>

<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
<tr>
  <th>아이템</th>
  <th>설명</th>
</tr>

<tr><td class="td"><strong>file_name</strong></td>
<td class="td">업로드한 파일이름입니다. 확장자까지 포함합니다.</td>
</tr>

<tr><td class="td"><strong>file_type</strong></td>
<td class="td">파일의 마임타입(Mime type)입니다.</td>
</tr>

<tr><td class="td"><strong>file_path</strong></td>
<td class="td">파일의 서버상 절대경로입니다.</td>
</tr>

<tr><td class="td"><strong>full_path</strong></td>
<td class="td">파일이름까지 포함한 서버상의 절대경로입니다.</td>
</tr>

<tr><td class="td"><strong>raw_name</strong></td>
<td class="td">확장자 없는 파일명입니다.</td>
</tr>

<tr><td class="td"><strong>orig_name</strong></td>
<td class="td">원래파일 이름입니다. 파일이름을 암호화 하는 옵션을 사용한경우에만 유용합니다.</td>
</tr>

<tr><td class="td"><strong>file_ext</strong></td>
<td class="td">점을 포함한 파일 확장자입니다.</td>
</tr>

<tr><td class="td"><strong>file_size</strong></td>
<td class="td">킬로바이트(KB)로 표시된 파일 크기입니다.</td>
</tr>

<tr><td class="td"><strong>is_image</strong></td>
<td class="td">파일이 이미지인지 아닌지를 나타냅니다.  1 = 이미지. 0 = 이미지아님.</td>
</tr>

<tr><td class="td"><strong>image_width</strong></td>
<td class="td">이미지 너비.</td>
</tr>

<tr><td class="td"><strong>image_heigth</strong></td>
<td class="td">이미지 높이. </td>
</tr>

<tr><td class="td"><strong>image_type</strong></td>
<td class="td">이미지 타입.  일반적으로 점이 없는 파일 확장자 입니다.</td>
</tr>

<tr><td class="td"><strong>image_size_str</strong></td>
<td class="td">이미지의 너비와 높이를 포함하는 문자열입니다. 이미지 태그에 삽입할때 유용합니다.</td>
</tr>


</table>

</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="encryption.html">Encryption Helper</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="form_validation.html">Form Validation Class</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>